package aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;


@Aspect  // 标记这是一个切面类
@Component  // 交给 Spring 容器管理
public class MyInterceptor {

//	设置我们的 Service.MusicServiceImpl 所有方法为切入点
	@Pointcut("execution(* Service.MusicServiceImpl.*(..))")
	private void pt() {}


	@Before("pt()")
	public void beforeDo(){
		System.out.println("[前置通知]");
	}

	@After("pt()")
	public void afterDo(){
		System.out.println("[最终通知]");
	}

	@AfterReturning("pt()")
	public void returnDo(){
		System.out.println("[后置通知]");
	}


	@AfterThrowing("pt()")
	public void exceptionDo(){
		System.out.println("[异常通知]方法抛出异常");
	}


	@Around("pt()")
	public void aroundDo(ProceedingJoinPoint pjp) throws Throwable{
		//ProceedingJoinPoint的getSignature()方法用于获取切入点
		System.out.println("环绕通知:开始执行[" + pjp.getSignature().getName() + "]方法！");
		Object res=null;
		res=pjp.proceed();
		System.out.println("环绕通知:结束执行[" + pjp.getSignature().getName() + "]方法！"); 
	}

}
